package com.css.zfzx.data.common;



import org.apache.commons.lang.StringUtils;

import java.text.DecimalFormat;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @Author Zyl
 * @Date 2021/3/8 16:08
 * @Version 1.0
 * @Describe: 生成调查对象位置码编码工具类
 */
public class GenerateSiteCodeUtil {
    /**
     * 行业名称：地震-040
     * 大类名称：地震灾害-10
     * 地震活动断层：100101
     * 场地地震工程地质条件钻孔：100201
     * 地震危险性计算点：100301
     * 房屋建筑隐患分解结果：100401
     * 市政设施隐患分解结果：100402
     * 04010 0301 000000 000000 001-----999
     */

    /**
     * @param code 区划编码
     * @param oldSitCode 上一个位置编号
     * @param categoryName 地震灾害类别
     * @return
     */
    public static String generateSiteCode(String code,String oldSitCode,String categoryName){
        String categoryCode = "";
        if("地震活动断层".equals(categoryName)){
            categoryCode="100101";
        }else if("场地地震工程地质条件钻孔".equals(categoryName)){
            categoryCode="100201";
        }else if("地震危险性计算点".equals(categoryName)){
            categoryCode="100301";
        }else if("房屋建筑隐患分解结果".equals(categoryName)){
            categoryCode="100401";
        }else if("市政设施隐患分解结果".equals(categoryName)){
            categoryCode="100402";
        }else {
            categoryCode="000000";
        }
        String newSiteCode = "040"+categoryCode+code+"000000"+generateOrderCode(oldSitCode);
        return newSiteCode;
    }
    /**
     * 生成001-999的编码
     * @return
     */
    public  static String generateOrderCode(String siteCode){
        if(StringUtils.isEmpty(siteCode)){
            //第一次添加数据，创建第一个位置编号
            return "001";
        }
        //设置格式
        DecimalFormat df = new DecimalFormat("000");
        //number线程安全方式增加或减少的对象
        AtomicInteger atomicInteger = new AtomicInteger();
        //截取当前最新位置编码的顺序编码后三位，在当前编码基础加1
        String lastSiteCode = siteCode.substring(21, siteCode.length());
        Integer integer = (Integer.valueOf(lastSiteCode))+1;
        atomicInteger.set(integer);
        String nextSiteCode = df.format(atomicInteger.get());
        return nextSiteCode;
    }
}
